AI ํ๋ ํธ๋ฆฌ์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์ด๋์ ๋๋ค. ํต์ฌ ๊ฐ๋ , ๊ตฌ์ฑ ์์๋ถํฐ ๊ฒ์, ๋ก๋ด ๊ณตํ ๋ฑ ์ค์ ์์ฉ ๋ถ์ผ๊น์ง ๋ค๋ฃน๋๋ค.
์ธ๊ณต์ง๋ฅ: ํ๋ ํธ๋ฆฌ์ ๋ํ ์ฌ์ธต ๋ถ์
์ธ๊ณต์ง๋ฅ์ ๋ฐฉ๋ํ๊ณ ์งํํ๋ ํ๊ฒฝ์์ ๊ฐ๋ฐ์๋ค์ ๊ฐ๋ ฅํ๊ณ ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ ์ง๊ด์ ์ธ ๋๊ตฌ๋ฅผ ๋์์์ด ๋ชจ์ํ๊ณ ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ๋น๋์ค ๊ฒ์์ ๋ฑ์ฅํ๋ ๋นํ๋ ์ด์ด ์บ๋ฆญํฐ(NPC)๋ถํฐ ์ฐฝ๊ณ ์์ ์ํฌ๋ฅผ ๋ถ๋ฅํ๋ ์์จ ๋ก๋ด์ ์ด๋ฅด๊ธฐ๊น์ง, ๋ฏฟ์ ๋งํ๊ณ ํจ๊ณผ์ ์ธ AI ํ๋์ ๋ง๋๋ ๊ฒ์ ์์ฒญ๋ ์์ ์ ๋๋ค. ๋ง์ ๊ธฐ์ ์ด ์กด์ฌํ์ง๋ง, ๊ทธ ์ฐ์ํจ๊ณผ ์ ์ฐ์ฑ์ผ๋ก ์ธํด ํ๋ ํธ๋ฆฌ(BT)๊ฐ ์ง๋ฐฐ์ ์ธ ํ์ผ๋ก ๋ถ์ํ์ต๋๋ค.
๋ง์ฝ ์ฌ๋ฌ๋ถ์ด ๊ฒ์์์ ์ง๋ฅ์ ์ผ๋ก ์ํ๋ฅผ ์ฐพ๊ณ , ์๊ตฐ๊ณผ ํ๋ ฅํ๋ฉฐ, ์ํฉ์ ๋ฐ๋ผ ์ ์ ์ ๋ฐ๊พธ๋ ์ ์๊ฒ ๊ฐํํ ์ ์ด ์๋ค๋ฉด, ํ๋ ํธ๋ฆฌ๊ฐ ์๋ํ๋ ๊ฒ์ ๋ชฉ๊ฒฉํ์ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค. ์ด ๊ธฐ์ฌ๋ ๊ฐ๋ฐ์, ๋์์ด๋, AI ๋งค๋์์ ๊ธ๋ก๋ฒ ์ฒญ์ค์ ์ํด ์ค๊ณ๋ ๊ธฐ๋ณธ ๊ฐ๋ ์์ ๊ณ ๊ธ ์์ฉ ํ๋ก๊ทธ๋จ์ผ๋ก ์ด๋ํ์ฌ ํ๋ ํธ๋ฆฌ์ ๋ํ ํฌ๊ด์ ์ธ ํ๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ ๋จ์ํ ์์คํ ์ ๋ฌธ์ ์ : ์ ํ๋ ํธ๋ฆฌ๊ฐ ํ์ํ๊ฐ
ํ๋ ํธ๋ฆฌ์ ํ์ ์ ์ดํดํ๋ ค๋ฉด ์ด์ ์ ๊ฒ์ด ๋ฌด์์ธ์ง ์ดํดํ๋ ๊ฒ์ด ๋์์ด ๋ฉ๋๋ค. ์๋ ๋์ ๊ฐ๋จํ AI์ ๋ํ ์ผ๋ฐ์ ์ธ ํด๊ฒฐ์ฑ ์ ์ ํ ์ํ ๋จธ์ (FSM)์ด์์ต๋๋ค.
FSM์ ์ํ ์งํฉ(์: ์์ฐฐ, ์ถ๊ฒฉ, ๊ณต๊ฒฉ)๊ณผ ์ํ ๊ฐ์ ์ ํ(์: "์ ๋ฐ๊ฒฌ" ์ ์์ฐฐ์์ ์ถ๊ฒฉ์ผ๋ก ์ ํ)์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๋ช ๊ฐ์ง ๋๋ ทํ ํ๋์ด ์๋ ๊ฐ๋จํ AI์ ๊ฒฝ์ฐ FSM์ด ์ ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๋น ๋ฅด๊ฒ ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์์ง๋๋ค.
- ํ์ฅ์ฑ ๋ฌธ์ : "์ํ"์ ๊ฐ์ ์ ์ํ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ๋ค๋ฅธ ๋ชจ๋ ๊ธฐ์กด ์ํ์์ ์ ํ์ ๋ง๋ค์ด์ผ ํ ์ ์์ต๋๋ค. ์ด๋ก ์ธํด ๊ฐ๋ฐ์๊ฐ "์คํ๊ฒํฐ ์ฝ๋"๋ผ๊ณ ๋ถ๋ฅด๋ ๋๋ฒ๊ทธํ๊ณ ํ์ฅํ๊ธฐ ์ด๋ ค์ด ์ฝํ ์ฐ๊ฒฐ ์น์ด ๋ฐ์ํฉ๋๋ค.
- ๋ชจ๋์ฑ ๋ถ์กฑ: ํ๋์ ์ํ์ ๋ฐ์ ํ๊ฒ ๊ฒฐํฉ๋์ด ์์ต๋๋ค. ์ฝ๋์ ๋ก์ง์ ๋ณต์ ํ์ง ์๊ณ ๋ ๋ค๋ฅธ ์๋๋ฆฌ์ค์์ "ํ์ฝ ์ฐพ๊ธฐ" ๋ก์ง์ ์ฌ์ฌ์ฉํ๊ธฐ ์ด๋ ต์ต๋๋ค.
- ๊ฒฝ์ง์ฑ: FSM์ ํญ์ ํ ๋ฒ์ ํ๋์ ์ํ์๋ง ์์ต๋๋ค. ์ด๋ก ์ธํด ๋ฏธ๋ฌํ๊ฑฐ๋ ๊ณ์ธตํ๋ ํ๋์ ๋ชจ๋ธ๋งํ๊ธฐ ์ด๋ ต์ต๋๋ค.
ํ๋ ํธ๋ฆฌ๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ๋ฐ๋์์ผ๋ฉฐ, ๋ณต์กํ AI ์์ด์ ํธ๋ฅผ ์ค๊ณํ๊ธฐ ์ํ ๋ณด๋ค ๊ตฌ์กฐํ๋๊ณ ๋ชจ๋ํ๋๊ณ ํ์ฅ ๊ฐ๋ฅํ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค.
ํ๋ ํธ๋ฆฌ๋ ๋ฌด์์ ๋๊น? AI์ ๋ํ ๊ณ์ธต์ ์ ๊ทผ ๋ฐฉ์
ํต์ฌ์ ์ผ๋ก ํ๋ ํธ๋ฆฌ๋ AI ์์ด์ ํธ์ ์์ฌ ๊ฒฐ์ ํ๋ฆ์ ์ ์ดํ๋ ๋ ธ๋์ ๊ณ์ธต์ ํธ๋ฆฌ์ ๋๋ค. ํ์ฌ ์กฐ์ง๋์ฒ๋ผ ์๊ฐํด ๋ณด์ธ์. ์ต์์ CEO(๋ฃจํธ ๋ ธ๋)๋ ๋ชจ๋ ์์ ์ ์ํํ์ง ์์ต๋๋ค. ๋์ ๊ด๋ฆฌ์(์ปดํฌ์งํธ ๋ ธ๋)์๊ฒ ์์ํ๊ณ , ๊ด๋ฆฌ์๋ ํน์ ์์ ์ ์ํํ๋ ์ง์(๋ฆฌํ ๋ ธ๋)์๊ฒ ์์ํฉ๋๋ค.
ํธ๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ ํ๋ ์ ๋๋ ์ ๋ฐ์ดํธ ์ฃผ๊ธฐ์์ ๋ฃจํธ์์ ์์ํ์ฌ ์์์ ์๋๋ก ํ๊ฐ๋ฉ๋๋ค. ์ด ํ๋ก์ธ์ค๋ฅผ "ํฑ"์ด๋ผ๊ณ ํฉ๋๋ค. ํฑ ์ ํธ๋ ํธ๋ฆฌ ์๋๋ก ์ ํ๋์ด ์ผ๋ จ์ ๊ท์น์ ๋ฐ๋ผ ํน์ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ๋ ธ๋๋ฅผ ํ์ฑํํฉ๋๋ค. ๊ฐ ๋ ธ๋๋ ์๋ฃ ์ ์์ ๋ ธ๋์ ์ํ๋ฅผ ๋ฐํํฉ๋๋ค.
- ์ฑ๊ณต: ๋ ธ๋๊ฐ ๋ํ๋ด๋ ์์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์์ต๋๋ค.
- ์คํจ: ์์ ์ ์๋ฃํ ์ ์์ต๋๋ค.
- ์คํ ์ค: ์์ ์ด ์งํ ์ค์ด๋ฉฐ ์๋ฃํ๋ ๋ฐ ๋ ๋ง์ ์๊ฐ์ด ํ์ํฉ๋๋ค(์: ๋ชฉ์ ์ง๊น์ง ๊ฑท๊ธฐ).
์์ ๋ ธ๋๋ ์ด๋ฌํ ์ํ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์ ์ด๋ค ์์์ ํฑํ ์ง ๊ฒฐ์ ํฉ๋๋ค. ์ด๋ฌํ ์ง์์ ์ธ ํํฅ์ ์ฌํ๊ฐ๋ฅผ ํตํด BT๋ ์ธ์์ ๋ณํํ๋ ์กฐ๊ฑด์ ๋งค์ฐ ๋ฐ์ํฉ๋๋ค.
ํ๋ ํธ๋ฆฌ์ ํต์ฌ ๊ตฌ์ฑ ์์
๋ชจ๋ ํ๋ ํธ๋ฆฌ๋ ๋ช ๊ฐ์ง ๊ธฐ๋ณธ ์ ํ์ ๋ ธ๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ด๋ฌํ ๋น๋ฉ ๋ธ๋ก์ ์ดํดํ๋ ๊ฒ์ด ์์คํ ์ ๋ง์คํฐํ๋ ์ด์ ์ ๋๋ค.
1. ๋ฆฌํ ๋ ธ๋: ์ก์ ๋ฐ ์กฐ๊ฑด
๋ฆฌํ ๋ ธ๋๋ ํธ๋ฆฌ์ ๋์ ์ ๋๋ค. ์ฆ, ์์ ์ ์ํํ๊ฑฐ๋ ์กฐ๊ฑด์ ํ์ธํ๋ ์ค์ ์์ ์์ ๋๋ค. ์์์ด ์์ต๋๋ค.
- ์ก์ ๋ ธ๋: ์ด๋ฌํ ๋ ธ๋๋ ๊ฒ์ ์ธ๊ณ์์ ์ก์ ์ ์คํํฉ๋๋ค. ์ก์ ์ด ์ฆ๊ฐ์ (์: ๋ฌด๊ธฐ ๋ฐ์ฌ)์ด๋ฉด `SUCCESS`๋ฅผ ์ฆ์ ๋ฐํํ ์ ์์ต๋๋ค. ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ(์: ์ง์ ์ผ๋ก ์ด๋) ์๋ฃ๋ ๋๊น์ง ๊ฐ ํฑ์์ `RUNNING`์ ๋ฐํํ๊ณ , ์๋ฃ๋๋ฉด `SUCCESS`๋ฅผ ๋ฐํํฉ๋๋ค. ์๋ก๋ `MoveToEnemy()`, `PlayAnimation("Attack")`, `ReloadWeapon()`์ด ์์ต๋๋ค.
- ์กฐ๊ฑด ๋ ธ๋: ์ด๋ฌํ ๋ ธ๋๋ ๋ณ๊ฒฝํ์ง ์๊ณ ์ธ์์ ์ํ๋ฅผ ํ์ธํ๋ ํน์ํ ์ ํ์ ๋ฆฌํ ๋ ธ๋์ ๋๋ค. ์กฐ๊ฑด์ด ์ฐธ์ด๋ฉด `SUCCESS`๋ฅผ ๋ฐํํ๊ณ ๊ฑฐ์ง์ด๋ฉด `FAILURE`๋ฅผ ๋ฐํํ์ฌ ํธ๋ฆฌ์์ ๊ฒ์ดํธ์จ์ด ์ญํ ์ ํฉ๋๋ค. ์๋ก๋ `IsHealthLow?`, `IsEnemyInLineOfSight?`, `HasAmmunition?`์ด ์์ต๋๋ค.
2. ์ปดํฌ์งํธ ๋ ธ๋: ์ ์ด ํ๋ฆ
์ปดํฌ์งํธ ๋ ธ๋๋ ํธ๋ฆฌ์ ๊ด๋ฆฌ์์ ๋๋ค. ํ๋ ์ด์์ ์์์ด ์์ผ๋ฉฐ ํน์ ๊ท์น ์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ์คํํ ์์์ ๊ฒฐ์ ํฉ๋๋ค. AI์ ๋ก์ง๊ณผ ์ฐ์ ์์๋ฅผ ์ ์ํฉ๋๋ค.
-
์ํ์ค ๋
ธ๋: ์ข
์ข
ํ์ดํ(โ)๋ก ํ์๋๊ฑฐ๋ "AND"๋ก ๋ ์ด๋ธ์ด ์ง์ ๋ฉ๋๋ค. ์ํ์ค๋ ์์์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์์๋๋ก ์คํํฉ๋๋ค. ์์ ์ค ํ๋๊ฐ ์คํจํ๋ฉด ์ฆ์ ์ค์งํ๊ณ `FAILURE`๋ฅผ ๋ฐํํฉ๋๋ค. ๋ชจ๋ ์์์ด ์ฑ๊ณตํ๋ฉด ์ํ์ค ์์ฒด๋ `SUCCESS`๋ฅผ ๋ฐํํฉ๋๋ค. ์ด๋ ์์๋๋ก ์ํํด์ผ ํ๋ ์์
์ํ์ค๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์: `Reload` ์ํ์ค๋ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค. Sequence( `HasAmmoInInventory?`, `PlayReloadAnimation()`, `UpdateAmmoCount()` ). ์์ด์ ํธ๊ฐ ์ธ๋ฒคํ ๋ฆฌ์ ํ์ฝ์ด ์์ผ๋ฉด ์ฒซ ๋ฒ์งธ ์์์ด ์คํจํ๊ณ ์ ์ฒด ์ํ์ค๊ฐ ์ฆ์ ์ค๋จ๋ฉ๋๋ค.
-
์ ํ๊ธฐ ๋
ธ๋(๋๋ ํด๋ฐฑ ๋
ธ๋): ์ข
์ข
๋ฌผ์ํ(?)๋ก ํ์๋๊ฑฐ๋ "OR"๋ก ๋ ์ด๋ธ์ด ์ง์ ๋ฉ๋๋ค. ์ ํ๊ธฐ๋ ๋ํ ์์์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์์๋๋ก ์คํํฉ๋๋ค. ๊ทธ๋ฌ๋ ์์ ์ค ํ๋๊ฐ ์ฑ๊ณตํ๋ฉด ์ฆ์ ์ค์งํ๊ณ `SUCCESS`๋ฅผ ๋ฐํํฉ๋๋ค. ๋ชจ๋ ์์์ด ์คํจํ๋ฉด ์ ํ๊ธฐ ์์ฒด๋ `FAILURE`๋ฅผ ๋ฐํํฉ๋๋ค. ์ด๋ ๋์ฒด ํ๋์ ๋ง๋ค๊ฑฐ๋ ๊ฐ๋ฅํ ๋ชฉ๋ก์์ ํ๋์ ํ๋์ ์ ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์: `Combat` ์ ํ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค. Selector( `PerformMeleeAttack()`, `PerformRangedAttack()`, `Flee()` ). AI๋ ๋จผ์ ๊ทผ์ ๊ณต๊ฒฉ์ ์๋ํฉ๋๋ค. ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ(์: ๋์์ด ๋๋ฌด ๋ฉ๋ฆฌ ์์) ์คํจํ๊ณ ์ ํ๊ธฐ๋ ๋ค์ ์์์ธ ์๊ฑฐ๋ฆฌ ๊ณต๊ฒฉ์ผ๋ก ์ด๋ํฉ๋๋ค. ๋ํ ์คํจํ๋ ๊ฒฝ์ฐ(์: ํ์ฝ ์์) ๋ง์ง๋ง ์ต์ ์ธ ๋๋ง์ผ๋ก ์ด๋ํฉ๋๋ค.
-
๋ณ๋ ฌ ๋
ธ๋: ์ด ๋
ธ๋๋ ๋ชจ๋ ์์์ ๋์์ ์คํํฉ๋๋ค. ์์ฒด ์ฑ๊ณต ๋๋ ์คํจ๋ ์ง์ ๋ ์ ์ฑ
์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ์๋ฅผ ๋ค์ด, ์์ ์ค ํ๋๊ฐ ์ฑ๊ณตํ๋ ์ฆ์ `SUCCESS`๋ฅผ ๋ฐํํ๊ฑฐ๋ ๋ชจ๋ ์์์ด ์ฑ๊ณตํ ๋๊น์ง ๊ธฐ๋ค๋ฆด ์ ์์ต๋๋ค. ์ด๋ ๊ธฐ๋ณธ ์์
์ ์คํํ๋ ๋์์ ๋ณด์กฐ ๋ชจ๋ํฐ๋ง ์์
์ ์คํํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
์: `Patrol` ๋ณ๋ ฌ์ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค. Parallel( `MoveAlongPatrolPath()`, `LookForEnemies()` ). AI๋ ํ๊ฒฝ์ ์ง์์ ์ผ๋ก ์ค์บํ๋ฉด์ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ๊ฑท์ต๋๋ค.
3. ๋ฐ์ฝ๋ ์ดํฐ ๋ ธ๋: ์์ ์
๋ฐ์ฝ๋ ์ดํฐ ๋ ธ๋๋ ์์์ด ํ๋๋ง ์๊ณ ํด๋น ์์์ ํ๋ ๋๋ ๊ฒฐ๊ณผ๋ฅผ ์์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ํธ๋ฆฌ๋ฅผ ์ด์์ ํ๊ฒ ๋ง๋ค์ง ์๊ณ ๊ฐ๋ ฅํ ์ ์ด ๋ฐ ๋ก์ง ๊ณ์ธต์ ์ถ๊ฐํฉ๋๋ค.
- ๋ฐ์ ๊ธฐ: ์์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ํต๋๋ค. `SUCCESS`๋ `FAILURE`๊ฐ ๋๊ณ `FAILURE`๋ `SUCCESS`๊ฐ ๋ฉ๋๋ค. `RUNNING`์ ์ผ๋ฐ์ ์ผ๋ก ๋ณ๊ฒฝ๋์ง ์๊ณ ์ ๋ฌ๋ฉ๋๋ค. ์ด๋ "if not" ๋ก์ง์ ๋ง๋๋ ๋ฐ ์ ํฉํฉ๋๋ค.
์: Inverter( `IsEnemyVisible?` )๋ ์ ์ด ๋ณด์ด์ง ์๋ ๊ฒฝ์ฐ์๋ง ์ฑ๊ณตํ๋ ์กฐ๊ฑด์ ๋ง๋ญ๋๋ค.
- ๋ฐ๋ณต๊ธฐ: ์์์ด ์คํจํ ๋๊น์ง ์ง์ ๋ ํ์๋งํผ ๋๋ ๋ฌด๊ธฐํ์ผ๋ก ์์์ ์คํํฉ๋๋ค.
- ์ฑ๊ณต๊ธฐ / ์คํจ๊ธฐ: ์์์ด ๋ฐํํ๋ ๋ด์ฉ์ ๊ด๊ณ์์ด ํญ์ ๊ฐ๊ฐ `SUCCESS` ๋๋ `FAILURE`๋ฅผ ๋ฐํํฉ๋๋ค. ์ด๋ ํธ๋ฆฌ์ ๋ถ๊ธฐ๋ฅผ ์ ํ ์ฌํญ์ผ๋ก ๋ง๋๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
- ์ ํ๊ธฐ / ์ฟจ๋ค์ด: ์์์ ์คํํ ์ ์๋ ๋น๋๋ฅผ ์ ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, `GrenadeThrow` ์ก์ ์ 10์ด๋ง๋ค ํ ๋ฒ๋ง ์ํํ ์ ์๋๋ก ์ ํ๊ธฐ๋ก ๋ฐ์ฝ๋ ์ดํ ํ ์ ์์ต๋๋ค.
๋ชจ๋ ํจ๊ป ์ ์ฉ: ์ค์ ์
1์ธ์นญ ์ํ ๊ฒ์์์ ๊ฐ๋จํ ์ ๊ตฐ์ธ AI๋ฅผ ์ํ ํ๋ ํธ๋ฆฌ๋ฅผ ์ค๊ณํด ๋ณด๊ฒ ์ต๋๋ค. ์ํ๋ ํ๋์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๊ตฐ์ธ์ ์ต์ฐ์ ์์๋ ํ๋ ์ด์ด๊ฐ ๋ณด์ด๋ฉด ํ๋ ์ด์ด๋ฅผ ๊ณต๊ฒฉํ๋ ๊ฒ์ ๋๋ค. ํ๋ ์ด์ด๊ฐ ๋ณด์ด์ง ์์ผ๋ฉด ๊ตฐ์ธ์ ์ง์ ๋ ๊ตฌ์ญ์ ์์ฐฐํด์ผ ํฉ๋๋ค. ์ ํฌ ์ค ๊ตฐ์ธ์ ์ฒด๋ ฅ์ด ๋ฎ์์ง๋ฉด ์ํ๋ฅผ ์ฐพ์์ผ ํฉ๋๋ค.
๋ค์์ ํ๋ ํธ๋ฆฌ์์ ์ด ๋ก์ง์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋๋ค(์์์ ์๋๋ก ์ฝ๊ณ , ๋ค์ฌ์ฐ๊ธฐ๋ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ํ๋).
๋ฃจํธ (์ ํ๊ธฐ)
|-- ๋ฎ์ ์ฒด๋ ฅ ํ์ถ (์ํ์ค)
| |-- IsHealthLow? (์กฐ๊ฑด)
| |-- FindCoverPoint (์ก์
) -> ์ด๋ ์ค์๋ RUNNING์ ๋ฐํํ๊ณ , ๊ทธ ํ SUCCESS๋ฅผ ๋ฐํํฉ๋๋ค.
| `-- TakeCover (์ก์
)
|
|-- ํ๋ ์ด์ด ๊ต์ (์ํ์ค)
| |-- IsPlayerVisible? (์กฐ๊ฑด)
| |-- IsWeaponReady? (์กฐ๊ฑด)
| |-- ์ ํฌ ๋ก์ง (์ ํ๊ธฐ)
| | |-- ํ๋ ์ด์ด ์ฌ๊ฒฉ (์ํ์ค)
| | | |-- IsPlayerInLineOfSight? (์กฐ๊ฑด)
| | | `-- Shoot (์ก์
)
| | `-- ๊ณต๊ฒฉ ์์น๋ก ์ด๋ (์ํ์ค)
| | |-- Inverter(IsPlayerInLineOfSight?) (๋ฐ์ฝ๋ ์ดํฐ + ์กฐ๊ฑด)
| | `-- MoveTowardsPlayer (์ก์
)
|
`-- ์์ฐฐ (์ํ์ค)
|-- GetNextPatrolPoint (์ก์
)
`-- MoveToPoint (์ก์
)
๊ฐ "ํฑ"์์ ์๋ํ๋ ๋ฐฉ์:
- ๋ฃจํธ ์ ํ๊ธฐ๊ฐ ์์๋ฉ๋๋ค. ์ฒซ ๋ฒ์งธ ์์์ธ `Low Health Escape` ์ํ์ค๋ฅผ ์๋ํฉ๋๋ค.
- `Low Health Escape` ์ํ์ค๋ ๋จผ์ `IsHealthLow?`๋ฅผ ํ์ธํฉ๋๋ค. ์ฒด๋ ฅ์ด ๋ฎ์ง ์์ผ๋ฉด ์ด ์กฐ๊ฑด์ `FAILURE`๋ฅผ ๋ฐํํฉ๋๋ค. ์ ์ฒด ์ํ์ค๊ฐ ์คํจํ๊ณ ์ ์ด๊ฐ ๋ฃจํธ๋ก ๋ฐํ๋ฉ๋๋ค.
- ๋ฃจํธ ์ ํ๊ธฐ๋ ์ฒซ ๋ฒ์งธ ์์์ด ์คํจํ ๊ฒ์ ๋ณด๊ณ ๋ ๋ฒ์งธ ์์์ธ `Engage Player`๋ก ์ด๋ํฉ๋๋ค.
- `Engage Player` ์ํ์ค๋ `IsPlayerVisible?`๋ฅผ ํ์ธํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์คํจํ๊ณ ๋ฃจํธ๋ `Patrol` ์ํ์ค๋ก ์ด๋ํ์ฌ ๊ตฐ์ธ์ด ํํ๋กญ๊ฒ ์์ฐฐํ๊ฒ ํฉ๋๋ค.
- ๊ทธ๋ฌ๋ `IsPlayerVisible?`๊ฐ ์ฑ๊ณตํ๋ฉด ์ํ์ค๊ฐ ๊ณ์๋ฉ๋๋ค. `IsWeaponReady?`๋ฅผ ํ์ธํฉ๋๋ค. ์ฑ๊ณตํ๋ฉด `Combat Logic` ์ ํ๊ธฐ๋ก ์งํ๋ฉ๋๋ค. ์ด ์ ํ๊ธฐ๋ ๋จผ์ `Shoot At Player`๋ฅผ ์๋ํฉ๋๋ค. ํ๋ ์ด์ด๊ฐ ์์ผ์ ์์ผ๋ฉด `Shoot` ์ก์ ์ด ์คํ๋ฉ๋๋ค.
- ์ ํฌ ์ค์ ๊ตฐ์ธ์ ์ฒด๋ ฅ์ด ๋จ์ด์ง๋ฉด ๋ค์ ํฑ์์ ์ฒซ ๋ฒ์งธ ์กฐ๊ฑด(`IsHealthLow?`)์ด ์ฑ๊ณตํฉ๋๋ค. ์ด๋ก ์ธํด `Low Health Escape` ์ํ์ค๊ฐ ์คํ๋์ด ๊ตฐ์ธ์ด ์ํ๋ฅผ ์ฐพ์ ์ํํ๊ฒ ๋ฉ๋๋ค. ๋ฃจํธ๊ฐ ์ ํ๊ธฐ์ด๊ณ ์ฒซ ๋ฒ์งธ ์์์ด ์ด์ ์ฑ๊ณต(๋๋ ์คํ ์ค)ํ๊ณ ์์ผ๋ฏ๋ก `Engage Player` ๋๋ `Patrol` ๋ถ๊ธฐ๋ฅผ ํ๊ฐ์กฐ์ฐจ ํ์ง ์์ต๋๋ค. ์ด๊ฒ์ด ์ฐ์ ์์๊ฐ ์์ฐ์ค๋ฝ๊ฒ ์ฒ๋ฆฌ๋๋ ๋ฐฉ์์ ๋๋ค.
์ด ๊ตฌ์กฐ๋ ๊น๋ํ๊ณ ์ฝ๊ธฐ ์ฌ์ฐ๋ฉฐ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ํ์ฅํ๊ธฐ ์ฝ๋ค๋ ๊ฒ์ ๋๋ค. ์๋ฅํ ํฌ์ฒ ํ๋์ ์ถ๊ฐํ๊ณ ์ถ์ผ์ญ๋๊น? `Combat Logic` ์ ํ๊ธฐ์ ์ฌ๊ฒฉ๋ณด๋ค ๋์ ์ฐ์ ์์๋ก ๋ค๋ฅธ ์ํ์ค๋ฅผ ์ฝ์ ํ ์ ์์ผ๋ฉฐ, ์์ฒด ์กฐ๊ฑด(`IsPlayerInCover?`, `HasGrenade?` ๋ฑ)์ด ํจ๊ป ์ ๊ณต๋ฉ๋๋ค.
ํ๋ ํธ๋ฆฌ vs. ์ ํ ์ํ ๋จธ์ : ๋ณต์ก์ฑ์ ๋ํ ๋ช ํํ ์น์
๋น๊ต๋ฅผ ๊ณต์ํํด ๋ณด๊ฒ ์ต๋๋ค.
| ๊ธฐ๋ฅ | ํ๋ ํธ๋ฆฌ(BT) | ์ ํ ์ํ ๋จธ์ (FSM) |
|---|---|---|
| ๋ชจ๋์ฑ | ๋งค์ฐ ๋์. ํ์ ํธ๋ฆฌ(์: "์ฒด๋ ฅ ํฉ ์ฐพ๊ธฐ" ์ํ์ค)๋ ํ ๋ฒ ์์ฑํ์ฌ ์ฌ๋ฌ ๋ค๋ฅธ AI ๋๋ ๋์ผํ ํธ๋ฆฌ์ ์ฌ๋ฌ ๋ถ๋ถ์์ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค. | ๋ฎ์. ๋ก์ง์ ์ํ ๋ฐ ์ ํ ๋ด์ ํฌํจ๋์ด ์์ต๋๋ค. ํ๋์ ์ฌ์ฌ์ฉํ๋ ค๋ฉด ์ข ์ข ์ํ์ ํด๋น ์ฐ๊ฒฐ์ ๋ณต์ ํด์ผ ํฉ๋๋ค. |
| ํ์ฅ์ฑ | ์ฐ์ํจ. ์ ํ๋์ ์ถ๊ฐํ๋ ๊ฒ์ ํธ๋ฆฌ์ ์ ๋ถ๊ธฐ๋ฅผ ์ฝ์ ํ๋ ๊ฒ๋งํผ ๊ฐ๋จํฉ๋๋ค. ๋๋จธ์ง ๋ก์ง์ ๋ฏธ์น๋ ์ํฅ์ ๊ตญํ๋ฉ๋๋ค. | ๋ถ๋. ์ํ๊ฐ ์ถ๊ฐ๋จ์ ๋ฐ๋ผ ์ ์ฌ์ ์ ํ ์๊ฐ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํ์ฌ "์ํ ํญ๋ฐ"์ด ๋ฐ์ํ ์ ์์ต๋๋ค. |
| ๋ฐ์์ฑ | ๋ณธ์ง์ ์ผ๋ก ๋ฐ์์ ์ ๋๋ค. ํธ๋ฆฌ๋ ๋ชจ๋ ํฑ์์ ๋ฃจํธ์์ ๋ค์ ํ๊ฐ๋๋ฏ๋ก ์ ์๋ ์ฐ์ ์์์ ๋ฐ๋ผ ์ธ์ ๋ณํ์ ์ฆ๊ฐ์ ์ผ๋ก ๋์ํ ์ ์์ต๋๋ค. | ๋ฐ์์ฑ์ด ๋จ์ด์ง๋๋ค. ์์ด์ ํธ๋ ํน์ ์ฌ์ ์ ์๋ ์ ํ์ด ํธ๋ฆฌ๊ฑฐ๋ ๋๊น์ง ํ์ฌ ์ํ์ "๊ฐํ" ์์ต๋๋ค. ์ ์ฒด ๋ชฉํ๋ฅผ ์ง์์ ์ผ๋ก ๋ค์ ํ๊ฐํ์ง ์์ต๋๋ค. |
| ๊ฐ๋ ์ฑ | ํนํ ์๊ฐ์ ํธ์ง๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ต๋๋ค. ๊ณ์ธต์ ๊ตฌ์กฐ๋ ์ฐ์ ์์์ ๋ก์ง ํ๋ฆ์ ๋ช ํํ๊ฒ ๋ณด์ฌ์ฃผ๋ฏ๋ก ๊ฒ์ ๋์์ด๋์ ๊ฐ์ ๋นํ๋ก๊ทธ๋๋จธ๋ ์ดํดํ ์ ์์ต๋๋ค. | ๋ณต์ก์ฑ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๋ฎ์์ง๋๋ค. ๋ณต์กํ FSM์ ์๊ฐ์ ๊ทธ๋ํ๋ ์คํ๊ฒํฐ ํ ์ ์์ฒ๋ผ ๋ณด์ผ ์ ์์ต๋๋ค. |
๊ฒ์์ ๋์ด์ ์์ฉ ๋ถ์ผ: ๋ก๋ด ๊ณตํ ๋ฐ ์๋ฎฌ๋ ์ด์
ํ๋ ํธ๋ฆฌ๋ ๊ฒ์ ์ฐ์ ์์ ๋ช ์ฑ์ ์ป์์ง๋ง ์ ์ฉ์ฑ์ ํจ์ฌ ๋ ํฝ๋๋ค. ์์จ์ ์ด๊ณ ์์ ์งํฅ์ ์ธ ์์ฌ ๊ฒฐ์ ์ด ํ์ํ ๋ชจ๋ ์์คํ ์ BT์ ์ ํฉํฉ๋๋ค.
- ๋ก๋ด ๊ณตํ: ์ฐฝ๊ณ ๋ก๋ด์ ํ๋ฃจ ๊ทผ๋ฌด ์ ์ฒด๋ฅผ BT๋ก ๋ชจ๋ธ๋งํ ์ ์์ต๋๋ค. ๋ฃจํธ๋ `FulfillOrder` ๋๋ `RechargeBattery`์ ๋ํ ์ ํ๊ธฐ์ผ ์ ์์ต๋๋ค. `FulfillOrder` ์ํ์ค์๋ `NavigateToShelf`, `IdentifyItem`, `PickUpItem` ๋ฐ `DeliverToShipping`๊ณผ ๊ฐ์ ์์์ด ํฌํจ๋ฉ๋๋ค. `IsBatteryLow?`์ ๊ฐ์ ์กฐ๊ฑด์ ์ต์์ ์ ํ์ ์ ์ดํฉ๋๋ค.
- ์์จ ์์คํ : ๋ฌด์ธ ํญ๊ณต๊ธฐ(UAV) ๋๋ ํ์ฌ ์๋ฌด์ ๋ก๋ฒ๋ BT๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์กํ ์๋ฌด ๊ณํ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ํ์ค์๋ `TakeOff`, `FlyToWaypoint`, `ScanArea` ๋ฐ `ReturnToBase`๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค. ์ ํ๊ธฐ๋ `ObstacleDetected` ๋๋ `LostGPS`์ ๊ฐ์ ๋น์ ํด๋ฐฑ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ์๋ฎฌ๋ ์ด์ ๋ฐ ํ๋ จ: ๊ตฐ์ฌ ๋๋ ์ฐ์ ์๋ฎฌ๋ ์ดํฐ์์ BT๋ ์๋ฎฌ๋ ์ด์ ๋ ์ํฐํฐ(์ฌ๋, ์ฐจ๋)์ ํ๋์ ๊ตฌ๋ํ์ฌ ํ์ค์ ์ด๊ณ ๋์ ์ ์ธ ํ๋ จ ํ๊ฒฝ์ ๋ง๋ค ์ ์์ต๋๋ค.
๊ณผ์ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก
ํ๋ ํธ๋ฆฌ๋ ๊ฐ๋ ฅํ์ง๋ง ๊ณผ์ ๊ฐ ์๋ ๊ฒ์ ์๋๋๋ค.
- ๋๋ฒ๊น : AI๊ฐ ํน์ ๊ฒฐ์ ์ ๋ด๋ฆฐ ์ด์ ๋ฅผ ์ถ์ ํ๋ ๊ฒ์ ํฐ ํธ๋ฆฌ์์ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ํธ๋ฆฌ๊ฐ ์คํ๋ ๋ ๊ฐ ๋ ธ๋์ ์ค์๊ฐ ์ํ(`SUCCESS`, `FAILURE`, `RUNNING`)๋ฅผ ๋ณด์ฌ์ฃผ๋ ์๊ฐ์ ๋๋ฒ๊น ๋๊ตฌ๋ ๋ณต์กํ ํ๋ก์ ํธ์ ๊ฑฐ์ ํ์์ ์ ๋๋ค.
- ๋ฐ์ดํฐ ํต์ : ๋ ธ๋๋ ์ ๋ณด๋ฅผ ์ด๋ป๊ฒ ๊ณต์ ํฉ๋๊น? ์ผ๋ฐ์ ์ธ ํด๊ฒฐ์ฑ ์ ๋ธ๋๋ณด๋๋ผ๋ ๊ณต์ ๋ฐ์ดํฐ ์ปจํ ์คํธ์ ๋๋ค. `IsEnemyVisible?` ์กฐ๊ฑด์ ๋ธ๋๋ณด๋์์ ํ๋ ์ด์ด์ ์์น๋ฅผ ์ฝ์ ์ ์๋ ๋ฐ๋ฉด, `DetectEnemy` ์ก์ ์ ์์น๋ฅผ ๋ธ๋๋ณด๋์ ์ธ ์ ์์ต๋๋ค.
- ์ฑ๋ฅ: ๋งค์ฐ ํฌ๊ณ ๊น์ ํธ๋ฆฌ๋ฅผ ๋ชจ๋ ํ๋ ์์์ ํฑํ๋ ๊ฒ์ ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์์ต๋๋ค. ์ด๋ฒคํธ ๊ธฐ๋ฐ BT(๊ด๋ จ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋๋ง ํธ๋ฆฌ๊ฐ ์คํ๋จ)์ ๊ฐ์ ์ต์ ํ๋ ์ด๋ฅผ ์ํํ ์ ์์ง๋ง ๋ณต์ก์ฑ์ด ์ถ๊ฐ๋ฉ๋๋ค.
๋ชจ๋ฒ ์ฌ๋ก:
- ์๊ฒ ์ ์งํ์ธ์: ๋ ๊น์ ํธ๋ฆฌ๋ณด๋ค ๋ ๋์ ํธ๋ฆฌ๋ฅผ ์ ํธํ์ธ์. ๊น์ด ์ค์ฒฉ๋ ๋ก์ง์ ๋ฐ๋ผ๊ฐ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
- ๋ชจ๋์ฑ์ ์์ฉํ์ธ์: ํ์ ๋๋ ์ธ๋ฒคํ ๋ฆฌ ๊ด๋ฆฌ์ ๊ฐ์ ์ผ๋ฐ์ ์ธ ์์ ์ ๋ํ ์๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํ์ ํธ๋ฆฌ๋ฅผ ๋น๋ํ์ธ์.
- ๋ธ๋๋ณด๋๋ฅผ ์ฌ์ฉํ์ธ์: ๋ชจ๋ ์ํ ์ ๋ณด์ ๋ธ๋๋ณด๋๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ ๋ก์ง์ ์์ด์ ํธ ๋ฐ์ดํฐ์์ ๋ถ๋ฆฌํ์ธ์.
- ์๊ฐ์ ํธ์ง๊ธฐ๋ฅผ ํ์ฉํ์ธ์: Unreal Engine์ ๋ด์ฅ๋ ๋๊ตฌ๋ Unity์ฉ Behavior Designer์ ๊ฐ์ ์์ ์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ์ด๋ฅผ ํตํด ํ๋ก๊ทธ๋๋จธ์ ๋์์ด๋ ๊ฐ์ ์ ์ํ ํ๋กํ ํ์ ์ ์, ์ฌ์ด ์๊ฐํ ๋ฐ ๋ ๋์ ํ์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ฏธ๋: ํ๋ ํธ๋ฆฌ ๋ฐ ๋จธ์ ๋ฌ๋
ํ๋ ํธ๋ฆฌ๋ ์ต์ ๋จธ์ ๋ฌ๋(ML) ๊ธฐ์ ๊ณผ ๊ฒฝ์ํ๋ ๊ฒ์ด ์๋๋ผ ์ํธ ๋ณด์์ ์ ๋๋ค. ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ ๋ฐฉ์์ด ๊ฐ์ฅ ๊ฐ๋ ฅํ ์๋ฃจ์ ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- ๋ฆฌํ ๋ ธ๋์ฉ ML: BT๋ ์์ ์์ค ์ ๋ต(์: `DecideToAttack` ๋๋ `DecideToDefend`)์ ์ฒ๋ฆฌํ ์ ์๋ ๋ฐ๋ฉด, ํ๋ จ๋ ์ ๊ฒฝ๋ง์ ํ์ ์์ค ์ก์ (์: ML์ ์ฌ์ฉํ์ฌ ์ ํํ๊ณ ์ธ๊ฐ๊ณผ ๊ฐ์ ์กฐ์ค์ ์ํํ๋ `AimAndShoot` ์ก์ ๋ ธ๋)์ ์คํํ ์ ์์ต๋๋ค.
- ํ๋ผ๋ฏธํฐ ํ๋์ฉ ML: ๊ฐํ ํ์ต์ ์ฌ์ฉํ์ฌ ํน์ ๋ฅ๋ ฅ์ ์ฟจ๋ค์ด ์๊ฐ ๋๋ ํํด๋ฅผ ์ํ ์ฒด๋ ฅ ์๊ณ๊ฐ๊ณผ ๊ฐ์ BT ๋ด์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ต์ ํํ ์ ์์ต๋๋ค.
์ด ํ์ด๋ธ๋ฆฌ๋ ๋ชจ๋ธ์ ์์ธก ๊ฐ๋ฅํ๊ณ ์ ์ด ๊ฐ๋ฅํ๋ฉฐ ๋์์ด๋ ์นํ์ ์ธ ํ๋ ํธ๋ฆฌ ๊ตฌ์กฐ์ ๋ฏธ๋ฌํ๊ณ ์ ์๋ ฅ์ด ๋ฐ์ด๋ ๋จธ์ ๋ฌ๋์ ํ์ ๊ฒฐํฉํฉ๋๋ค.
๊ฒฐ๋ก : ํ๋ AI๋ฅผ ์ํ ํ์ ๋๊ตฌ
ํ๋ ํธ๋ฆฌ๋ ์ ํ ์ํ ๋จธ์ ์ ๊ฒฝ์ง๋ ์ ํ์์ ๋ฒ์ด๋ ์๋นํ ์ง์ ์ ๋ํ๋ ๋๋ค. ์์ฌ ๊ฒฐ์ ์ ์ํ ๋ชจ๋์์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ ๊ฐ๋ ์ฑ์ด ๋ฐ์ด๋ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ ๊ฐ๋ฐ์์ ๋์์ด๋๋ ํ๋ ๊ธฐ์ ์์ ๋ณผ ์ ์๋ ๊ฐ์ฅ ๋ณต์กํ๊ณ ๋ฏฟ์ ์ ์๋ AI ํ๋์ ๋ง๋ค ์ ์๊ฒ ๋์์ต๋๋ค. ๋ธ๋ก๋ฒ์คํฐ ๊ฒ์์ ๊ตํํ ์ ๋ถํฐ ๋ฏธ๋ ๊ณต์ฅ์ ํจ์จ์ ์ธ ๋ก๋ด์ ์ด๋ฅด๊ธฐ๊น์ง ํ๋ ํธ๋ฆฌ๋ ๊ฐ๋จํ ์ฝ๋๋ฅผ ์ง๋ฅ์ ์ธ ์ก์ ์ผ๋ก ๋ฐ๊พธ๋ ๋ ผ๋ฆฌ์ ๋ฐฑ๋ณธ์ ์ ๊ณตํฉ๋๋ค.
์๋ จ๋ AI ํ๋ก๊ทธ๋๋จธ, ๊ฒ์ ๋์์ด๋ ๋๋ ๋ก๋ด ๊ณตํ ์์ง๋์ด์ด๋ ํ๋ ํธ๋ฆฌ๋ฅผ ๋ง์คํฐํ๋ ๊ฒ์ ๊ธฐ๋ณธ ๊ธฐ์ ์ ๋ํ ํฌ์์ ๋๋ค. ๊ฐ๋จํ ๋ก์ง๊ณผ ๋ณต์กํ ์ง๋ฅ ์ฌ์ด์ ๊ฒฉ์ฐจ๋ฅผ ํด์ํ๋ ๋๊ตฌ์ด๋ฉฐ, ์์จ ์์คํ ์ธ๊ณ์์ ๊ทธ ์ค์์ฑ์ ๊ณ์ ์ปค์ง ๊ฒ์ ๋๋ค.